import { createWidget } from 'discourse/widgets/widget';
import { iconNode } from 'discourse/helpers/fa-icon-node';
import { h } from 'virtual-dom';
import { escapeExpression } from 'discourse/lib/utilities';

function renderIcon(name, key, canAct) {
  const iconArgs = key === 'unpinned' ? { 'class': 'unpinned' } : null,
        icon = iconNode(name, iconArgs);

  const attributes = { title: escapeExpression(I18n.t(`topic_statuses.${key}.help`)) };
  return h(`${canAct ? 'a' : 'span'}.topic-status`, attributes, icon);
}

export default createWidget('topic-status', {
  tagName: 'div.topic-statuses',

  html(attrs) {
    const topic = attrs.topic;
    const canAct = this.currentUser && !attrs.disableActions;

    const result = [];
    const renderIconIf = (conditionProp, name, key) => {
      if (!topic.get(conditionProp)) { return; }
      result.push(renderIcon(name, key, canAct));
    };

    renderIconIf('is_warning', 'envelope', 'warning');

    if (topic.get('closed') && topic.get('archived')) {
      renderIcon('lock', 'locked_and_archived');
    } else {
      renderIconIf('closed', 'lock', 'locked');
      renderIconIf('archived', 'lock', 'archived');
    }

    renderIconIf('pinned', 'thumb-tack', 'pinned');
    renderIconIf('unpinned', 'thumb-tack', 'unpinned');
    renderIconIf('invisible', 'eye-slash', 'invisible');

    return result;
  }
});
